package leetcode_300;

import java.util.Stack;

/**
 *@author 周杨
 *BasicCalculator_224 基本计算机 加减和括号
 *describe: 1. 没有括号时正常运算，将结果存入res中
			2. 遇到左括号时将res及括号之前的运算符压栈
			3. 遇到右括号时将当前值乘以左括号之前的符号（stack中取出），并加上左括号前的运算结果（stack中取出）
			AC 64%
 *2018年6月18日 上午9:45:51
 */
public class BasicCalculator_224 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	public int calculate(String s) {  
	    Stack<Integer> stack = new Stack<Integer>();  
	    int sign = 1, res = 0;  
	    for (int i = 0; i < s.length(); i++) {  
	        char ch = s.charAt(i);  
	        if (Character.isDigit(ch)) {  
	            int cur = ch - '0';  
	            while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1)))  
	                cur = cur * 10 + s.charAt(++i) - '0';  
	            res = res + sign * cur;  
	        } else if (ch == '+') {  
	            sign = 1;  
	        } else if (ch == '-') {  
	            sign = -1;  
	        } else if (ch == '(') {  
	            stack.push(res);  
	            res = 0;  
	            stack.push(sign);  
	            sign = 1;  
	        } else if (ch == ')') {  
	            res = stack.pop() * res +stack.pop();  
	        }  
	    }  
	    return res;  
	}  
}
